package monitormercado.negocio.analise.estrategia;

import java.util.Date;
import java.util.List;

import monitormercado.framework.Analise;
import monitormercado.framework.Conclusao;
import monitormercado.framework.Estrategia;
import monitormercado.framework.Sinal;
import monitormercado.negocio.Tick.ControladorTick;
import monitormercado.negocio.Tick.Tick;
import monitormercado.util.Util;

public class EstrategiaBuyHold extends Estrategia {

	private final static String NOME = "Buy and Hold";

	public EstrategiaBuyHold() {
		super(NOME);
		setBenchmark(true);
	}

	@Override
	public Analise identificarSinais(List<Tick> ticks, Date dataInicial, Date dataFinal) {
		//@TODO reimplementar para recuperar os ticks das datas corretas  
		Analise analise = new Analise();
		ControladorTick controladorTick = new ControladorTick();
		String sigla = ticks.get(0).getSigla();

		Sinal compra = new Sinal(NOME, Conclusao.COMPRA);
//		compra.setTick(ticks.get(0));
		Tick tickCompra = controladorTick.recuperarTickNaData(sigla, dataInicial);
		while (tickCompra == null) {
			dataInicial = Util.somaDiasUteis(dataInicial, 1);
			tickCompra = controladorTick.recuperarTickNaData(sigla, dataInicial); 
//			System.out.println("tick nulo");
		}
		compra.setTick(tickCompra);

		Sinal venda = new Sinal(NOME, Conclusao.VENDA);
		Tick tickVenda = controladorTick.recuperarTickNaData(sigla, dataFinal);
		while (tickVenda == null) {
			dataFinal = Util.diminuiDiasUteis(dataFinal, 1);
			tickVenda = controladorTick.recuperarTickNaData(sigla, dataFinal); 
//			System.out.println("tick nulo");
		}

//		venda.setTick(ticks.get(ticks.size() - 1));
//		venda.setTick(controladorTick.recuperarTickNaData(ticks.get(0).getSigla(), dataFinal));
		venda.setTick(tickVenda);

		analise.incluirSinal(compra);
		analise.incluirSinal(venda);
		return analise;
	}
}
